今天执行如下SQL时:1
2
3
4
UPDATE materials_barcode_info SET del_flag = 1 WHERE barcode_id IN (
SELECT barcode_id FROM materials_barcode_info WHERE barcode_length != LENGTH(barcode_example)
)
提示1
[Err] 1093 - You can't specify target table 'materials_barcode_info' for update in FROM clause
本意是想将条码规则表中条码规则中样例实际长度和条码规则中长度不一致的条码规则进行逻辑删除
单独执行 SELECT barcode_id from materials_barcode_info where barcode_length != LENGTH(barcode_example)
运行正确
单独执行 update materials_barcode_info set del_flag = 1 where barcode_id in ('x','x')
运行正确
MySQL 对子查询的使用存在限制:
https://dev.mysql.com/doc/refman/5.7/en/subquery-restrictions.html
即不能在一个SQL中先查询同一张表中的某些记录然后再更新同一张表中的某些记录
修改一下SQL,再嵌套一层
1 | UPDATE materials_barcode_info SET del_flag = 1 WHERE barcode_id IN ( |